package cn.edu.seu.ssny.service;

import cn.edu.seu.ssny.entity.Project;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 数据分析服务
 */
public interface IStatisticsService {

    /**
     * 功能描述:
     * <根据项目ID计算出该项目设备类别的能耗(指定项目)
     * <example:
     * <返回
     * <类别1-能耗
     * <...
     * <类别N-能耗
     *
     * @param project
     * @return
     */
    Map<String, Double> caculatePowercostByProject(Project project);


//    /**
//     * 功能描述:
//     * <根据时间列表计算出每段时间的能耗(指定项目)
//     *
//     * @param project
//     * @param dates    [20210707,20210708,20210709,..]
//     * @param mode     coolingMode or HeatingMode
//     * @param timeMode
//     * @return 每段时间能耗
//     */
//    List<Double> caculatePowercostByDatesAndModeAndProject(Project project, List<Date> dates, int mode, int timeMode);


    /**
     * 功能描述:
     * <根据时间列表计算出机组能效(指定项目)
     * <example
     * <dates [20210707,20210708,20210709,20210710]
     * <timeMode = MODE_DAY
     * <返回
     * <机组1--[20210707能效，20210708能效...]
     * <...
     * <机组N--[20210707能效，20210708能效...]
     *
     * @param project
     * @param dates
     * @param timeMode
     * @return
     */
    Map<String, List<Double>> caculateMachineGroupEfficiencyByProject(Project project, List<Date> dates, int timeMode);

    /**
     * 功能描述:
     * <example
     * <dates [20210707,20210708,20210709,20210710]
     * <timeMode = MODE_DAY
     * <mode = 制冷
     * <返回
     * <[20210707制冷能效，20210708制冷能效...,20210710制冷能效]
     *
     * @param project
     * @param dates
     * @param mode     制冷模式 或者 供暖模式
     * @param timeMode
     * @return
     */
    List<Double> caculateSystemEfficiency(Project project, List<Date> dates, int mode, int timeMode);

    /**
     * 功能描述:
     * <计算可再生能源利用量
     *
     * @return
     */
    Double caculateRenewEnergy();

    /**
     * 功能描述:
     * <计算节约标煤量
     *
     * @return
     */
    Double caculateCoalSaved();

    /**
     * 功能描述:
     * <计算碳排放量
     *
     * @return
     */
    Double caculateCarbonEmission();

    /**
     * 功能描述:
     * <计算系统能耗指标
     *
     * @param project
     * @param dates
     * @param timeMode
     * @param mode     供暖模式 或者 制冷模式
     * @return
     */
    List<Double> caculateSystemPowercostStd(Project project, List<Date> dates, int timeMode, int mode);

}
